var express = require('express')
var fs = require('fs')
var path = require('path')
var userRouter = express.Router()
var jwt = require('jsonwebtoken')


// 分页===设置接口：============
userRouter.get('/list', (req, res) => {
    // console.log('收到客户端请求get');
    var { page, count } = req.query
    // 第一步读取users.json文件中的用户数据 
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath)
    arr = arr.toString() ? JSON.parse(arr) : []



    // 分页========================
    var newarr = arr.slice((page - 1) * count, page * count)


    res.send({ code: 200, msg: '请求成功', list: newarr })//将数组一起连通请求一并发送list：newarr
})





// 模糊搜索============
userRouter.get('/search', (req, res) => {
    // 接收参数
    var { searchkey } = req.query
    // 读取内容在过滤
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath)
    arr = arr.toString() ? JSON.parse(arr) : []

    // 将参数从用户中的name属性中过滤
    var newarr = arr.filter((item) => {
        // 方式一==========================indexOf()返回的是下标，
        // return item.name.indexOf(searchkey) != -1
        // 方式二===================includes（）返回true/false
        // return item.name.includes(searchkey) 
        // 方式三=======================利用正则也可以
        return new RegExp(searchkey).test(item.name)
    })
    res.send({ code: 200, msg: '查询成功', list: newarr })
})





// 登录==========
// ======注意点：get也可以，但是，这里有密码，用get的话安全性太低了，所以这里最好用post，让密码隐藏
userRouter.post('/login', (req, res) => {
    // console.log('来自客户端的请求post');
    // console.log(req.body);
    //  =================1.接收客户端发来的数据，并进行判断
    var { phone, pass } = req.body
    // 读取
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath)
    arr = arr.toString() ? JSON.parse(arr) : []


    // 用来自刻画段的数据做判断,看是否在服务端的用户列表中,在则登录成功,不在则失败
    // =================2.接受到数据后判断
    // 这的indexOf不能支持回到函数查找，并且查找的是元素，因为是对象，所以这里用findindex最好了，
    var i = arr.findIndex((item, index) => {
        return item.phone == phone && item.pass == pass
    })
    // console.log(i);
    //===========3.因这里的indexOf返回的是下标，所以要对下标进行判断
    if (i != -1) {
        // 调用第三方包jsonwebtoken生成token字符串
        // 参数：加密数据，密钥，{算法，过期时间}
        var token = jwt.sign({phone},"1234",{algorithm:'HS256',expiresIn: 60})

        // 登录成功后，可以一并发送返回登录成功信息和登录令牌
        res.send({ code: 200, msg: '登录成功', userinfo: arr[i], token })
    } else {
        res.send({ code: 400, msg: '登录失败' })
    }

})
// 注册
userRouter.post('/register', (req, res) => {
    // 获取注册相关的参数
    var { phone, name, pass, email } = req.body

    //  读取===========
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath)
    arr = arr.toString() ? JSON.parse(arr) : []

    // 添加新用户到user.json中
    var i = arr.findIndex((item) => {
        return item.phone == phone
    })
    if (i != -1) {
        res.send({ code: 400, msg: '该手机号已注册，注册失败！' })
    } else {
        arr.push({ ...req.body, isgroup: '编辑组', admin: true, status: true })
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8')
        res.send({ code: 200, msg: '注册成功' })
    }

})


// 删除
userRouter.post('/delete', (req, res) => {
    // 先获取前端传来的手机参数
    var { phone } = req.body


    //  在读取===========
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath)
    arr = arr.toString() ? JSON.parse(arr) : []


    // 在arr中查赵手机号对应的用户
    var i= arr.findIndex((item)=>{
        return item.phone == phone
    })
    if (i != -1) {
        arr.splice(i,1)
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8')
        // 分页=====
        var newarr = arr.slice(1,7)
        res.send({ code: 200, msg: '删除成功',list:newarr})
    }else{
        res.send({ code: 400, msg: '删除失败' })
    }





})



module.exports = userRouter